#include "classification.hpp"
#include <vector>
#include <iostream>  
#include <stdlib.h>  
#include <stdio.h>  
#include <string.h>   
#include <unistd.h>  
#include <dirent.h>  

using namespace std; 

int main(int argc, char** argv) {
  Classifier classifier;
  Mat src,test;
  vector<string> getFiles(string cate_dir);
  string mnist_test = "../test/";	//file path which you want to test

  vector<string> files = getFiles(mnist_test);

  string path;
  for(int i=0;i<files.size();i++)
  {
    path = mnist_test+files[i];
    src = imread(path);
    int result = classifier.Classify(src);
    cout<<path<<": "<<result<<endl;
}

  return 0;
}

vector<string> getFiles(string cate_dir)
{
  vector<string> files;//存放文件名
  
#ifdef linux
	DIR *dir;
	struct dirent *ptr;
	char base[1000];
 
	if ((dir=opendir(cate_dir.c_str())) == NULL)
        {
		perror("Open dir error...");
                exit(1);
        }
 
	while ((ptr=readdir(dir)) != NULL)
	{
		if(strcmp(ptr->d_name,".")==0 || strcmp(ptr->d_name,"..")==0)    ///current dir OR parrent dir
		        continue;
		else if(ptr->d_type == 8)    ///file
			//printf("d_name:%s/%s\n",basePath,ptr->d_name);
			files.push_back(ptr->d_name);
		else if(ptr->d_type == 10)    ///link file
			//printf("d_name:%s/%s\n",basePath,ptr->d_name);
			continue;
		else if(ptr->d_type == 4)    ///dir
		{
			files.push_back(ptr->d_name);
			/*
		        memset(base,'\0',sizeof(base));
		        strcpy(base,basePath);
		        strcat(base,"/");
		        strcat(base,ptr->d_nSame);
		        readFileList(base);
			*/
		}
	}
	closedir(dir);
#endif

	//排序，按从小到大排序
	sort(files.begin(), files.end());
	return files;
}